package com.bawei.lib_image.utils

import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
import com.bumptech.glide.load.engine.Resource
import java.io.ByteArrayOutputStream

object BitmapUtils {

    /**
     * 质量压缩
     */
    fun compressQuality(resources:Resources,resId:Int,quality:Int):Bitmap{
        //从资源文件中解析图片
        var bm=BitmapFactory.decodeResource(resources,resId)
        var bmos=ByteArrayOutputStream()
        //把图片压缩到输入流中
        bm.compress(Bitmap.CompressFormat.JPEG,100,bmos)

        //从流中解析图片
        var newBitmap=BitmapFactory.decodeByteArray(bmos.toByteArray(),quality,bmos.toByteArray().size)
        //回收资源
        bm.recycle()
        bmos.close()

        return newBitmap
    }


    /**
     * 矩阵压缩
     */

    fun compressMatrixBitmap(resources:Resources,resId:Int,sx:Float,sy:Float):Bitmap{
        //创建矩阵Matrix
        var bitmapMatrix= Matrix().apply {
            postScale(sx,sy)
        }

        //加载资源图片
        var bm=BitmapFactory.decodeResource(resources,resId)

        var newBitmap=Bitmap.createBitmap(bm,0,0,bm.width,bm.height,bitmapMatrix,true)
        //释放资源
        bm.recycle()
        return newBitmap
    }



/**
★ɪ编码格式压缩
 *计算图片占内存大小：宽*高*每个像素占的字节大小
 * RGBA_F16:占64位，8字节（不推荐）
 *ARGB_8888：占32位，4个字节（不推荐）
 * RGB_565：占16位，2个字节（通用）
 * ALPHA_8:占8位，1个字节
 *ARGB_4444：占16位，2个字节(即将废弃)
 * */
fun compressEncodeFormatBitmap(resources:Resources,resId:Int,config:Bitmap.Config = Bitmap.Config.RGB_565):Bitmap{

    //创建
    var options = BitmapFactory.Options().apply {
        inPreferredConfig = config
    }

    var newBitmap = BitmapFactory.decodeResource(resources,resId,options)

    return  newBitmap
}

    /**
     * 缩放压缩
     */
    fun compressScaleBitmap(resources:Resources,resId:Int,dstW:Int,dstH:Int):Bitmap{
        //加载图片资源
        var bm = BitmapFactory.decodeResource(resources,resId)

        val newBitmap = Bitmap.createScaledBitmap(bm,dstW,dstH,true)

        //释放资源
        bm.recycle()

        return newBitmap
    }


    /**
     * 二次采样压缩(像素点会变少，图片会模糊)
     *
     */
    fun compressSampleSizeBitmap(resources:Resources,resId:Int,maxW:Int,maxH:Int):Bitmap{
        //默认为1 === 没有采（必须是2的倍数）
        var samplesSize = 1

        //第一次加载
        //创建加载参数
        var  options = BitmapFactory.Options().apply {
            //表示只加载图片的大小，不会加载图片的像素点
            inJustDecodeBounds = true
        }

        var bm = BitmapFactory.decodeResource(resources,resId,options)

        //获取图片的宽高
        var bmW = options.outWidth
        var bmH = options.outHeight

        while (maxW > maxW || maxH > maxH){
            //采样率大小增加2倍
            samplesSize *= 2
            //重新计算宽高
            bmW /= samplesSize
            bmH /= samplesSize
        }

        //二次采样
        //加载图片的像素
        options.inJustDecodeBounds = false
        options.inSampleSize = samplesSize

        //释放资源
        bm.recycle()

        //var newBitmap = BitmapFactory.decodeResource(resources,resId,options)



        return  BitmapFactory.decodeResource(resources,resId,options)
    }



}